/**
 * 
 */
/*
 * var __ctx = '${ctx}'; var __basePath = '${ctx}${__basePath}'; var __dhtmlx =
 * '${dhtmlx}';
 */

//
// $.messager.alert(title, msg, icon, fn) icon:error,info,question,warning
// $.messager.confirm(title, msg, fn)
// $.messager.prompt(title, msg, fn)
// $.messager.show({title:'操作提示',msg:'请选择您要删除的记录！',showType:'slide',timeout:5000})


$.extend($.fn.validatebox.defaults.rules, {
	minLength : {
		validator : function(value, param) {
			return value.length >= param[0];
		},
		message : '输入字符长度不小于{0}。 '
	},
	maxLength : {
		validator : function(value, param) {
			return value.length <= param[0];
		},
		message : '输入字符长度不大于{0}。'
	},
	unique : {
		validator : function(value, param) {
			var params = {};
			params[param[1]] = value;
			for (var i = 2; i < param.length; i++) {
				var val = '';
				var name = $('#' + param[i]).attr('textboxname');
				if (name) {
					params[name] = $('input.textbox-value[name="' + name + '"]').val();
				} else {
					params[param[i]] = $('#' + param[i]).val();
				}
			}
			var rtn = false;
			KD.ajax({
				url : param[0],
				data : params,
				async : false,
				success : function(data) {
					rtn = true;
				}
			});
			return rtn;
		},
		message : '数据重复！'
	},
	//验证汉子
    CHS: {
        validator: function (value) {
            return /^[\u0391-\uFFE5]+$/.test(value);
        },
        message: '只能输入汉字！'
    },
    //移动手机号码验证
    mobile: {//value值为文本框中的值
        validator: function (value) {
            var reg = /^1[3|4|5|8|9]\d{9}$/;
            return reg.test(value);
        },
        message: '输入手机号码格式不准确！'
    },
    //国内邮编验证
    zipcode: {
        validator: function (value) {
            var reg = /^[1-9]\d{5}$/;
            return reg.test(value);
        },
        message: '邮编必须是非0开始的6位数字！'
    },
    //用户账号验证(只能包括 _ 数字 字母) 
    account: {//param的值为[]中值
        validator: function (value, param) {
            if (value.length < param[0] || value.length > param[1]) {
                $.fn.validatebox.defaults.rules.account.message = '用户名长度必须在' + param[0] + '至' + param[1] + '范围';
                return false;
            } else {
                if (!/^[\w]+$/.test(value)) {
                    $.fn.validatebox.defaults.rules.account.message = '用户名只能数字、字母、下划线组成！';
                    return false;
                } else {
                    return true;
                }
            }
        }, message: ''
    },
    //smallint验证
    smallint: {//value值为文本框中的值
        validator: function (value) {
        	if (value == '')
        		return true;
        	if (isNaN(value))
				return false;
            var reg = /^(\+|\-)?\d{1,5}$/;
            return reg.test(value) && parseInt(value, 10) >= -32768 && parseInt(value, 10) <= 32767;
        },
        message: '数值必须在 -32768 与 32767 的整数之间！'
    }
});
/**
 * 在layout的panle全局配置中,增加一个onCollapse处理title
 */
$.extend($.fn.layout.paneldefaults, {
	onCollapse : function() {
		// 获取layout容器
		var layout = $(this).parents('div.layout');
		// 获取当前region的配置属性
		var opts = $(this).panel('options');
		if (opts.title || opts.iconCls) {
			// 获取key
			var expandKey = 'expand' + opts.region.substring(0, 1).toUpperCase() + opts.region.substring(1);
			// 从layout的缓存对象中取得对应的收缩对象
			var expandPanel = layout.data('layout').panels[expandKey];
			// 针对横向和竖向的不同处理方式
			if (opts.region == 'west' || opts.region == 'east') {
				var marginTop = 2;
				var str = '';
				if (opts.iconCls) {
					str += '<div class="panel-icon ' + opts.iconCls + '"></div>';
					marginTop = 18;
				}
				if (opts.title) {
					// 竖向的文字打竖,其实就是切割文字加br
					var split = [];
					var c = '';
					for (var i = 0; i < opts.title.length; i++) {
						c = opts.title.substring(i, i + 1);
						split.push(c);
					}
					str += '<div class="panel-title" style="margin-top: ' + marginTop + 'px;">' + split.join('<br>') + '</div>';
				}
				expandPanel.panel('body').css('text-align', 'center').html(str);
			} else {
				if (opts.iconCls) {
					expandPanel.panel('header').append('<div class="panel-icon ' + opts.iconCls + '"></div>');
					expandPanel.panel('header').find('.panel-title').addClass('panel-with-icon');
				}
				expandPanel.panel('setTitle', opts.title);
			}
		}
	}
});
/**
 * 
 */
$.extend($.fn.datagrid.defaults.editors, {
	numberspinner: {
		init: function(container, options) {
			var input = $('<input type="text">').appendTo(container);
			return input.numberspinner(options);
		},
		destroy: function(target) {
			$(target).numberspinner('destroy');
		},
		getValue: function(target) {
			return $(target).numberspinner('getValue');
		},
		setValue: function(target, value) {
			$(target).numberspinner('setValue',value);
		},
		resize: function(target, width) {
			$(target).numberspinner('resize',width);
		}
	},
	dialog: {
		init: function(container, options) {
			var input = $('<input readonly="readonly">').css({
				'width' : '100%',
				'height' : options.height,
				'border' : '0px'
			}).appendTo(container);
			var dialog = null;
			var url = KD.getNewUrl(options.url, options.initData(options.name));
			var dialogOptions = $.extend(options.dialogOptions, {
				url : url,
				buttons : [ {
					text : '确定',
					iconCls : "icon-ok",
					handler : function(e) {
						var returnValue = dialog.iframe.getReturnValue();
						if (returnValue === false || returnValue === null || returnValue === undefined) {
							$.messager.alert('提示', '您没有任何返回信息或信息不完整，请重新操作！', 'error');
							return;
						}
						options.onOk(options.name, returnValue);
						dialog.container.dialog('close');
					}
				}, {
					text : '返回',
					iconCls : "icon-undo",
					handler : function(e) {
						dialog.container.dialog('close');
					}
				} ]
			});
			dialog = KD.initDialog(dialogOptions);
			return input;
		},
		destroy: function(target) {
		},
		getValue: function(target) {
			return target.val();
		},
		setValue: function(target, value) {
			target.val(value);
		},
		resize: function(target, width) {
		}
	}
});

/**
 * propertygrid属性扩展
 */
$.extend($.fn.propertygrid.defaults.columns[0][1], {
	formatter : function(value, rowData, rowIndex) {
		if (rowData.text)
			return rowData.text;
		else if (rowData.formatter)
			return rowData.formatter(value, rowData, rowIndex);
		else
			return value;
	}
});



var KD = {
	/**
	 * 将list数据转换成tree数据
	 */
	listToTree : function(data, opts) {
		if (!data || !isArray(data)) {
			throw new error('data must be an array');
		}
		opts = opts || {};
		var options = {
			idField : 'id',
			parentIdField : 'parentId',
			textField : 'text',
			stateField : 'state',
			checkedField : 'checked',
			stateFormatter : null,
			checkedFormatter : null
		};
		options = $.extend(options, opts);
		var list = [];
		for (var i = 0; i < data.length; i++) {
			var n = {
				id : data[i][options.idField],
				parentId : data[i][options.parentIdField],
				text : data[i][options.textField],
				state : data[i][options.stateField] ? data[i][options.stateField] : 'open',
				checked : data[i][options.checkedField],
				attributes : data[i]
			};
			if (options.stateFormatter && typeof options.stateFormatter == 'function') {
				n.state = options.stateFormatter(data[i]);
			}
			if (options.checkedFormatter && typeof options.checkedFormatter == 'function') {
				n.checked = options.checkedFormatter(data[i]);
			}
			list.push(n);
		}
		var tree = [];
		for (var i = 0; i < list.length; i++) {
			if (list[i].id) {
				for (var j = 0; j < list.length; j++) {
					if (list[i].id === list[j].parentId) {
						if (!list[i].children || !isArray(list[i].children)) {
							list[i].children = [];
						}
						list[i].children.push(list[j]);
					}
				}
			}
			if (!list[i].parentId) {
				tree.push(list[i]);
			}
		}
		return tree;
	},
	ajax : function(opts) {
		var p = {
			type : 'post',
			dataType : 'json',
			cache : false,
			
			complete : function() {

			},
			error : function() {
				$.messager.alert('提示', '网络异常：无法连接服务器！', 'error');
			}
		};
		return $.ajax($.extend(p, opts, {
			success : function(data) {
				if (data.result == 1) {
					if (opts.success) {
						opts.success(data);
					}
				} else {
					$.messager.progress('close');
					$.messager.alert('提示', data.message?data.message:"未知错误。", 'error');
				}
			}
		}));
	},
	initGrid : function(gridId, opts) {
		var p = {
			maxHeight : 590,
			fit : true,
			fitColumns : true,
			striped : true, // 奇偶行
			idField : 'id',
			//loadMsg : '正在马不停蹄的为您加载，请稍候。。。',
			toolbar : [ '-', {
				id : 'add',
				text : '新增',
				iconCls : 'kd-icon-add',
				handler : function() {
					KD.toGo(__basePath + '/add.do');
				}
			}, '-', {
				id : 'edit',
				text : '修改',
				iconCls : 'kd-icon-edit',
				handler : function() {
					var row = $('#' + gridId).datagrid('getSelected');
					if (!row) {
						$.messager.alert('提示', '您没有选中任何记录！', 'info');
						return;
					}
					KD.toGo(__basePath + '/edit.do', {
						id : row.id
					});
				}
			}, '-', {
				id : 'view',
				text : '查看',
				iconCls : 'kd-icon-view',
				handler : function() {
					var row = $('#' + gridId).datagrid('getSelected');
					if (!row) {
						$.messager.alert('提示', '您没有选中任何记录！', 'info');
						return;
					}
					KD.toGo(__basePath + '/view.do', {
						id : row.id
					});
				}
			}, '-', {
				id : 'delete',
				text : '删除',
				iconCls : 'kd-icon-delete',
				handler : function() {
					// getSelections
					var rows = $('#' + gridId).datagrid('getSelections');
					if (rows.length == 0) {
						$.messager.alert('提示', '您没有选中任何记录！', 'info');
						return;
					}
					$.messager.confirm('提示', '您确定要删除所有选中的行吗？', function(flag) {
						if (flag) {
							var ids = '';
							for (var i = 0; i < rows.length; i++) {
								ids += (i == 0 ? '' : ',') + rows[i].id;
							}
							KD.ajax({
								url : __basePath + '/delete.do',
								data : {
									ids : ids
								},
								success : function(data) {
									$.messager.alert('提示', '删除成功！', 'info');
									$('#' + gridId).datagrid('reload');
								}
							});
						}
					});
				}
			} ],
			pagination : true, // 分页
			rownumbers : true, // 显示行号
			singleSelect : false, // 只能选择一行
			pageNumber : 1,
			pageSize : 20,
			// sortName : 'id', 排序字段不能和multiSort一起使用
			// sortOrder : 'desc'//,
			multiSort : true,
			onLoadError : function() {
				$.messager.alert('提示', '网络异常：无法连接服务器！', 'error');
			},
			loadFilter : function(data) {
				if (data.result == '1') {
					return data.data;
				} else {
					$.messager.alert('提示', '表格加载失败：' + data.message, 'error');
					return {
						total : 0,
						rows : []
					};
				}
			},
			onDblClickRow : function(index, row) {
				var options = $(this).datagrid('options');
				var btn = null;
				for (var i = 0; i < options.toolbar.length; i++) {
					if (options.toolbar[i].id && options.toolbar[i].id == 'edit') {
						btn = options.toolbar[i];
						break;
					}
					if (options.toolbar[i].id && options.toolbar[i].id == 'view') {
						btn = options.toolbar[i];
					}
				}
				if (btn != null) {
					$(this).datagrid('clearSelections');
					$(this).datagrid('selectRow', index);
					btn.handler();
				}
			}
		};
		$('#' + gridId).datagrid($.extend(p, opts));
	},
	doSearch : function(formId, gridId) {
		$('#' + gridId).datagrid('load', $('#' + formId).serializeObject());
	},
	doClear : function(formId) {
		$('#' + formId).form('clear');
	},
	doSave : function(formId, callBack) {
		callBack = callBack || function(data) {
			$.messager.alert('提示', '保存成功！', 'info', function() {
				var id = $("#" + formId + " input[name='id']").val();
				if (id == '') {
					KD.toGo(__basePath + '/edit.do', {
						id : data.data.id
					});
				}
			});
		};
		if ($('#' + formId).form('validate')) {
			KD.ajax({
				url : __basePath + '/save.do',
				data : $('#' + formId).serializeArray(),
				success : callBack
			});
		}
	},
	toGo : function(url, param) {
		window.location.href = KD.getNewUrl(url, param);
	},
	getNewUrl : function(url, param) {
		if (param) {
			for ( var key in param) {
				url += (url.indexOf('?') != -1 ? '&' : '?');
				if (param[key] === undefined || param[key] === null) {
					url += key + '=';
				} else if (isArray(param[key])) {
					for (var i = 0; i < param[key].length; i++) {
						if (param[key][i] === undefined || param[key][i] === null) {
							url += (i == 0 ? '' : '&') + key + '=';
						} else {
							url += (i == 0 ? '' : '&') + key + '=' + param[key][i];
						}
					}
				} else {
					url += key + '=' + param[key];
				}
			}
		}
		url = encodeURI(url);
		url = url.replace(/#/g, '%23');
		return url;
	},
	back : function() {
		window.history.go(-1);
	},
	backList : function() {
		KD.toGo(__basePath + '/list.do');
	},
	comboboxOptions : function(opts) {
		opts = opts || {};
		var p = {
			panelHeight : 100,
			editable : false,
			valueField : 'id',
			textField : 'itemName',
			loadFilter : function(data) {
				if (data.result == '1')
					return data.data;
				$.messager.alert('提示', '下拉列表[' + inputId + ']加载失败：' + data.message, 'error');
				return [];
			},
			icons : [ {
				iconCls : 'kd-icon-clear'/*,
				handler : function(e) {
					console.log(e);
				}*/
			} ],
			onClickIcon : function(iconIndex) {
				$(this).combobox('clear'); // 清除选中
			}
		};
		p = $.extend(p, opts);
		if (opts.nodekey) {
			p.url = __ctx + '/baseconfig/diccode/queryDicBynodeKey.do?nodeKey=' + opts.nodekey;
		}
		return p;
	},
	initCombobox : function(inputId, opts) {
		$('#' + inputId).combobox(KD.comboboxOptions(opts));//.combobox('initClear');
	},
	initDialog : function(opts) {
		var iframeName = 'iframe' + new Date().getTime();
		var container = $('<div></div>').appendTo($('body'));;
		var p = {
			title : '模态窗口',
			width : 700,
			height : 400,
			closed : false,
			cache : false,
			modal : true,
			onClose : function() {
				if (opts.url) {
					container.dialog('destroy');
				}
			}
		};
		p = $.extend(p, opts);
		if (opts.url) {
			p.content = '<div style="width: 100%; height: 100%; overflow: hidden;"><iframe name="' + iframeName + '" id="' + iframeName + '" scrolling="no" frameborder="0" src="' + opts.url + '" style="width: 100%; height: 100%;"></iframe></div>';
		}
		container.dialog(p);
		var rtn = { container : container };
		if (opts.url) {
			rtn.iframe = $('#' + iframeName)[0].contentWindow;
			if (opts.dialogData) {
				rtn.iframe.dialogData = opts.dialogData;
			}
		}
		return rtn;
	},
	initPropertygrid : function(gridId, opts) {
		var p = {
			fit : true,
			showHeader : false,
			showGroup : true,
			scrollbarSize : 16,
			columns : [ [ {
				field : 'name',
				title:'属性'
			}, {
				field : 'value',
				title:'值'
			} ] ]
		};
		$('#' + gridId).propertygrid($.extend(p, opts));
	},
	encodeHtml : function(s) {
		return s.replace(/</g, '&lt;').replace(/>/g, '&gt;'); 
	},
	setFormDisabled : function(formId) {
		$('#' + formId + " input[class*='easyui-']," + '#' + formId + " textarea[class*='easyui-']").each(function(){
			var io = $(this);
			if(io.hasClass('easyui-validatebox'))
			{
				io.validatebox('readonly',true)
			}
			else if(io.hasClass('easyui-textbox'))
			{
				io.textbox('readonly',true)
			}
			else if(io.hasClass('easyui-passwordbox'))
			{
				io.passwordbox('readonly',true)
			}
			else if(io.hasClass('easyui-combobox'))
			{
				io.combobox('readonly',true)
			}
			else if(io.hasClass('easyui-combotree'))
			{
				io.combotree('readonly',true)
			}
			else if(io.hasClass('easyui-combogrid'))
			{
				io.combogrid('readonly',true)
			}
			else if(io.hasClass('easyui-combotreegrid'))
			{
				io.combotreegrid('readonly',true)
			}
			else if(io.hasClass('easyui-numberbox'))
			{
				io.numberbox('readonly',true)
			}
			else if(io.hasClass('easyui-datebox'))
			{
				io.datebox('readonly',true)
			}
			else if(io.hasClass('easyui-datetimebox'))
			{
				io.datetimebox('readonly',true)
			}
			else if(io.hasClass('easyui-datetimespinner'))
			{
				io.datetimespinner('readonly',true)
			}
			else if(io.hasClass('easyui-calendar'))
			{
				io.calendar('readonly',true)
			}
			else if(io.hasClass('easyui-spinner'))
			{
				io.spinner('readonly',true)
			}else if(io.hasClass('easyui-numberspinner'))
			{
				io.numberspinner('readonly',true)
			}else if(io.hasClass('easyui-timespinner'))
			{
				io.timespinner('readonly',true)
			}else if(io.hasClass('easyui-slider'))
			{
				io.slider('readonly',true)
			}
			else if(io.hasClass('easyui-filebox'))
			{
				io.filebox('readonly',true)
			}
		});
		$('#' + formId).find("input,textarea,select").attr('disabled', true);
		
		
	},
	Color : {
		reg : /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/,
		hexToRgb : function(hex) { // 十六进制格式转RGB格式
			if (hex && this.reg.test(hex)) {
				if (hex.length === 4) {
					var hexNew = "#";
					for (var i = 1; i < 4; i += 1) {
						hexNew += hex.slice(i, i + 1).concat(hex.slice(i, i + 1));
					}
					hex = hexNew;
				}
				// 处理六位的颜色值
				var hexChange = [];
				for (var i = 1; i < 7; i += 2) {
					hexChange.push(parseInt("0x" + hex.slice(i, i + 2)));
				}
				return "RGB(" + hexChange.join(",") + ")";
			} else {
				return hex;
			}
		},
		rgbToHex : function(rgb) { // RGB格式转十六进制格式
			if (/^(rgb|RGB)/.test(rgb)) {
				var aColor = rgb.split("(")[1].split(")")[0].split(",");
				var strHex = "#";
				for (var i = 0; i < aColor.length; i++) {
					var hex = Number(aColor[i]).toString(16);
					if (hex === "0") {
						hex += hex;
					}
					strHex += hex;
				}
				if (strHex.length !== 7) {
					strHex = rgb;
				}
				return strHex.toUpperCase();
			} else if (this.reg.test(rgb)) {
				var aNum = rgb.replace(/#/, "").split("");
				if (aNum.length === 6) {
					return rgb;
				} else if (aNum.length === 3) {
					var numHex = "#";
					for (var i = 0; i < aNum.length; i += 1) {
						numHex += (aNum[i] + aNum[i]);
					}
					return numHex;
				}
			} else {
				return rgb;
			}
		}
	}
};

function isArray(o) {
	return Object.prototype.toString.call(o) === '[object Array]';
}
Array.prototype.contains = function(item) {
	return RegExp(item).test(this);
};
String.prototype.replaceAll = function(s1, s2) {
	return this.replace(new RegExp(s1, "gm"), s2);
};
String.prototype.startWith = function(str) {
	if (str == null || str == "" || this.length == 0 || str.length > this.length)
		return false;
	if (this.substr(0, str.length) == str)
		return true;
	else
		return false;
	return true;
};
String.prototype.endWith = function(str) {
	if (str == null || str == "" || this.length == 0 || str.length > this.length)
		return false;
	if (this.substring(this.length - str.length) == str)
		return true;
	else
		return false;
	return true;
};

$.fn.serializeObject = function() {
	var o = {};
	var a = this.serializeArray();
	$.each(a, function() {
		if (o[this.name] !== undefined) {
			if (!o[this.name].push) {
				o[this.name] = [ o[this.name] ];
			}
			o[this.name].push(this.value || '');
		} else {
			o[this.name] = this.value || '';
		}
	});
	return o;
};

function formatDouble(value,row,indx)
{
	if (value && parseFloat(value))
		return parseFloat(value).toFixed(2);
	return value;
}
function formatInt(value,row,indx)
{
	if (value && parseFloat(value))
		return parseFloat(value).toFixed(0);
	return value;
}
function formatDate(value,row,indx)
{
	if(value && value.length >= 10)
		return value.substring(0,10);
	else
		return value;
}
function formatSendStatus(value,row,indx)
{
    	if(value == 1)
    		return '送货中';
    	if(value == 0)
    		return '未送货';
    	if(value ==2)
    		return '送货完成'
    	return value;
}
function stylerSendStatus(value,row,indx)
{
	if(value == 1)
		return 'color:green;';
	if(value == 0)
		return 'color:red;';
	if(value ==2)
		return 'color:black;';
	return 'color:red;';;
}
function formatOrderSendStatus(value,row,indx)
{
	if(value == 0)
	{
		return '未确认';
	}
	else if(value == 1)
	{
		return '已确认';
	}
	else if(value == 5)
	{
		return '送货中';
	}
	else if(value == 10)
	{
		return '已完成';
	}
	return value;
}
function stylerOrderSendStatus(value,row,indx)
{
	if(value == 0)
		return 'color:red;';
	if(value == 1)
		return 'color:blue;';
	if(value == 5)
		return 'color:green;';
	if(value ==10)
		return 'color:black;';
	return 'color:red;';;
}